home *** CD-ROM | disk | FTP | other *** search
- Program EX_0805;
- {Listing 17P - see documentation in TUTOR.SSS}
-
- uses SSS, crt;
- { For Pascal other than Turbo/Quick erase above line }
-
- const
- ARRIVL = 1;
- STARTA = 2;
- ENDACT = 3;
- NEXTAC = 4;
- REPORT = 5;
-
- REPTME = -1;
- TIMEL = 120;
- SSIZE = 4;
-
- { For MS Pascal $include:'SSSP1.H' }
-
- var
- n, countr, server, ecode : integer;
-
- { For MS Pascal $include:'SSSP2.H' }
-
- procedure signal(s:string; v: real; w,d: integer);
- var x, y: integer;
- begin
- x := wherex;
- y := wherey;
- clreol;
- write(s,v:w:d);
- gotoxy(x,y);
- end;
-
- procedure prime;
- begin
- n := 0;
- countr := 0;
- server := 1;
- INIQUE(1,1,1);
- INISTA(1,'bus',1,0,0,0);
- TALLY(1,server);
- CREATE(0, n);
- CREATE(TIMEL, REPTME);
- end;
-
- begin
-
- prime;
-
- repeat
- ecode := NEXTEV;
- if ecode > 0 then
- begin
- case ecode of
-
- ARRIVL: if IDE = REPTME then
- SCHED(0, REPORT, IDE)
- else
- begin
- n := n + 1;
- signal('Simulated time: ',T,7,2);
- SETA(1, EX(0.9));
- CREATE(EX(1), n);
- SCHED(0, NEXTAC, IDE);
- end;
-
- NEXTAC: if server > 0 then SCHED(0, STARTA, IDE)
- else QUEUE(1, 0);
-
- STARTA: begin
- SCHED(A(1), ENDACT, IDE);
- server := server - 1;
- TALLY(1,server);
- end;
-
- ENDACT: begin
- DISPOS;
- server := server + 1;
- TALLY(1,server);
- if NQ(1) > 0 then
- begin
- REMVFQ(1,1);
- SCHED(0, STARTA, IDE);
- end;
- end;
-
- REPORT: begin
- SCHED(TIMEL, REPORT, IDE);
- if countr = 0 then
- writeln('# average avail.s ')
- else
- writeln(countr:1,QAVG(1):8:1,
- SAVG(1):8:3,' ');
- CLEARQ(1);
- CLEARS(0);
- countr := countr + 1;
- if countr > SSIZE then SIMEND(0);
- end;
- end;
- end;
- until ecode = 0;
-
- end.